

package objetos;

import DataTypes.DataComentario;
import DataTypes.DataContenido;
import DataTypes.DataUsuario;
import enums.EnumAprob;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;

public abstract class Contenido{
    
    protected String titulo;
    protected Calendar fechaPublicacion;
    protected DataUsuario autor;
    protected String url;
    protected String cuerpo;
    protected boolean bloqueado;
    protected boolean publicar;
    protected EnumAprob aprobacion;
    protected ArrayList<Comentario> comentarios;
    protected HashMap<String, Usuario> etiquetas;
    
    public String getCuerpo() {
        return cuerpo;
    }

    public void setCuerpo(String cuerpo) {
        this.cuerpo = cuerpo;
    }
    
    public DataUsuario getAutor() {
        return autor;
    }

    public void setAutor(DataUsuario autor) {
        this.autor = autor;
    }

    public ArrayList<Comentario> getComentarios() {
        return comentarios;
    }
    
    public ArrayList<DataComentario> getDataComentarios() {
        ArrayList<DataComentario> result = new ArrayList<DataComentario>();
        Iterator<Comentario> itera = comentarios.iterator();
        DataComentario dc = null;
        while (itera.hasNext()){
            Comentario com = itera.next();
            
            dc = new DataComentario(com.getTexto(),com.getFecha(),com.getPuntos(),com.getUsr().getDusuario());
            result.add(dc);
        }
        return result;
    }

    public void setComentarios(ArrayList<Comentario> comentarios) {
        this.comentarios = comentarios;
    }
    
    public Calendar getFechaPublicacion() {
        return fechaPublicacion;
    }

    public void setFechaPublicacion(Calendar fechaPublicacion) {
        this.fechaPublicacion = fechaPublicacion;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public abstract String getTipo();
    
    void eliminarComentario(String coment) {
        Iterator<Comentario> itera = comentarios.iterator();
        Comentario com = null;
        boolean seEncontro = false;
        while (itera.hasNext() && !seEncontro){
            com = itera.next();
            if (com.getTexto().equals(coment)){
                seEncontro = true;
                comentarios.remove(com);
            }
        }
    }

    public boolean isBloqueado() {
        return bloqueado;
    }

    public void setBloqueado(boolean bloqueado) {
        this.bloqueado = bloqueado;
    }

    public EnumAprob getAprobacion() {
        return aprobacion;
    }

    public void setAprobacion(EnumAprob aprobacion) {
        this.aprobacion = aprobacion;
    }

    public boolean isPublicar() {
        return publicar;
    }

    public void setPublicar(boolean publicar) {
        this.publicar = publicar;
    }

    public void meGustaComentario(String coment) {
        Iterator<Comentario> itera = comentarios.iterator();
        Comentario com = null;
        while (itera.hasNext()){
            com = itera.next();
            if ((com.getTexto()+com.getFecha().get(Calendar.SECOND)).equals(coment)){
                com.meGusta();
            }
        }
    }

    public void noMeGustaComentario(String coment) {
        Iterator<Comentario> itera = comentarios.iterator();
        Comentario com = null;
        while (itera.hasNext()){
            com = itera.next();
            if ((com.getTexto()+com.getFecha().get(Calendar.SECOND)).equals(coment)){
                com.noMeGusta();
            }
        }
    }

    public void etiquetarImg(ArrayList<String> correoEtiquetado){
        
    }

    public void quitarEtiquetaImg(String correoEtiquetado) {
        
    }

    public ArrayList<DataUsuario> getDataEtiquetas() {
        return null;
    }

    public boolean isEtiquetadoUsr(String correoUsr) {
        return (etiquetas.containsKey(correoUsr));
    }

    public DataContenido getContenido() {
        DataContenido dc = new DataContenido();
        dc.setTitulo(titulo);
        dc.setFechaPublicacion(fechaPublicacion);
        dc.setBloqueado(bloqueado);
        DataUsuario aut = new DataUsuario(autor);
        dc.setAutor(aut);
        dc.setTipo(this.getTipo());
        dc.setUrl(url);
        dc.setCuerpo(cuerpo);
        dc.setPublicar(publicar);
        dc.setAprobacion(aprobacion);

        ArrayList<DataComentario> coments = new ArrayList<DataComentario>();
        Iterator<Comentario> iteraCom = comentarios.iterator();
        Comentario coment = null;
        DataComentario dComent = null;
        
        while (iteraCom.hasNext()){
            coment = iteraCom.next();
            dComent = coment.getDataComentario();
            coments.add(dComent);
        }
        
        dc.setComentarios(coments);
        
        ArrayList<DataUsuario> etiqs = new ArrayList<DataUsuario>();
        Iterator<Usuario> iteraEtiqs = etiquetas.values().iterator();
        
        Usuario usr = null;
        DataUsuario dUsr = null;
        
        while (iteraEtiqs.hasNext()){
            usr = iteraEtiqs.next();
            dUsr = usr.getDusuario();
            etiqs.add(dUsr);
        }
        
        dc.setEtiquetas(etiqs);
        
        return dc;
        
    }
    
    public int getPuntaje(){
        int puntaje = 0;
        Iterator<Comentario> itera = comentarios.iterator();
        Comentario coment = null;
        while (itera.hasNext()){
            coment = itera.next();
            puntaje += coment.getPuntos();
        }
        return puntaje;
    }
    
}
